public class No049 {
    /**
     * 把只包含质因子2、3和5的数称作丑数（Ugly Number）。
     * 例如6、8都是丑数，但14不是，因为它包含质因子7。
     * 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
     * 1 2 3 4 5 6 8 9 10 12 15 16 18 20 24 25 27 30 32 35 36 40
     */
    public static int GetUglyNumber_Solution(int index) {
        if (index <= 0) return 0;
        int[] uglyNumberList = new int[index];
        uglyNumberList[0] = 1;
        int nextIndex = 1;
        // 以2，3，5为因子的数的索引
        int m2 = 0, m3 = 0, m5 = 0;
        while (nextIndex < index) {
            // 下一个丑数
            int min = Math.min(uglyNumberList[m2] * 2, Math.min(uglyNumberList[m3] * 3, uglyNumberList[m5] * 5));
            uglyNumberList[nextIndex] = min;
            while (uglyNumberList[m2] * 2 <= min) m2++;
            while (uglyNumberList[m3] * 3 <= min) m3++;
            while (uglyNumberList[m5] * 5 <= min) m5++;
            nextIndex++;
        }
        return uglyNumberList[nextIndex - 1];
    }

    public static void main(String[] args) {
        System.out.println(GetUglyNumber_Solution(7));
    }
}

